package kr.co.magic;

import java.io.BufferedReader;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import java.net.URL;
import java.net.URLConnection;

import org.apache.http.HttpEntity;
import org.apache.http.HttpRequest;
import org.apache.http.HttpResponse;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.mime.HttpMultipartMode;
import org.apache.http.entity.mime.MultipartEntity;
import org.apache.http.entity.mime.content.ByteArrayBody;
import org.apache.http.entity.mime.content.StringBody;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.util.EntityUtils;
import org.json.JSONException;

import com.google.zxing.client.android.integration.IntentIntegrator;
import com.google.zxing.client.android.integration.IntentResult;

import kr.co.magic.R;
import kr.co.magic.utils.DongYangCommon;
import android.app.Activity;
import android.app.ActivityManager;
import android.app.AlertDialog;
import android.app.Dialog;
import android.app.PendingIntent;
import android.app.ProgressDialog;
import android.content.DialogInterface;
import android.content.Entity;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.content.pm.PackageManager.NameNotFoundException;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.net.Uri;
import android.os.Bundle;
import android.os.Handler;
import android.telephony.TelephonyManager;
import android.util.Log;
import android.view.Gravity;
import android.view.KeyEvent;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnTouchListener;
import android.view.ViewGroup;
import android.webkit.JsResult;
import android.webkit.WebChromeClient;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.EditText;
import android.widget.FrameLayout;
import android.widget.Toast;

import com.loopj.android.http.*;

/**
 * DongYang 모바일 메인 클래스이다.
 * 
 * @author johnkim <cale9797@gmail.com>
 * modify 2012 
 */
public class DongyangView extends Activity {
	public static final String TAG = DongyangView.class.getSimpleName();

	// Server 주소.

	// 개발 환경서버 - 2012 0412, 0621
//	private String URL_ADDRESS = "http://10.63.117.142:8080";
//	private String URL_ADDRESS = "http://10.63.117.55:9080";	
//	private String URL_ADDRESS = "http://10.63.227.80:8080";	// 노트북, 유동 IP
	// 운영서버 - 2012 0329
	private String URL_ADDRESS = "http://tmgmo.magic.co.kr";

	// 안드로이드 버전 체크 파일 위치.		운영서버
	private String URL_NEW_VESION = "http://tmgmo.magic.co.kr/d/check_android_version.txt";
	// 안드로이드 버전 체크 파일 위치.		개발서버
//	private String URL_NEW_VESION = "http://10.63.117.142:8080/d/check_android_version.txt";
//	private String URL_NEW_VESION = "http://10.63.117.55:9080/d/check_android_version.txt";
//	private String URL_NEW_VESION = "http://10.63.227.80:8080/d/check_android_version.txt";		// 노트북, 유동 IP
	
	// 다운로드 받을 APK 파일 위치.		운영서버
	private String URL_DOWNLOAD_APK = "http://tmgmo.magic.co.kr/d/tymagic.apk";
	// 다운로드 받을 APK 파일 위치.		개발서버
//	private String URL_DOWNLOAD_APK = "http://10.63.117.142:8080/d/tymagic.apk";
//	private String URL_DOWNLOAD_APK = "http://10.63.117.55:9080/d/tymagic.apk";
//	private String URL_DOWNLOAD_APK = "http://10.63.227.80:8080/d/tymagic.apk";		// 노트북, 유동 IP
	
	
	private ProgressDialog mProgressDialog;
	
	private static final int DIALOG_DOWNLOAD_CONTENT = 101;

	private static String phoneNo = "";
	private static String deviceId = "";
	private static String currentDate = "";
	private static String saything = "";
	WebView mWeb;

	private final Handler handler = new Handler();
	
	// 서명.
	public static Bitmap signature = null;
	
	public static String barCode = "";
	private boolean barCodeFlag = false;
	
	DongYangCommon dongYangCommon = new DongYangCommon();
	
	private String idx = "";
	private String approvalChecked = "";
	private String approvalResultCode = "";
	
	private String nextTarget = "";
	private String organizationId = "";
	private String id = "";
	private String deliveryNo = "";
	private String productionNo = "";
	private String waterPress = "";
	private String location = "";
	private String payment_method = "";
	private String card_approval_num ="";
	
	// KICC 어플에게 전달하는 파라미터.
	private String rentContractNo_send ="";				// 계약번호.  ##보내는 이름은 rentContractNo
	private String approvalAmount_send = "";		// 결재 총액. ##보내는 이름은 approvalAmount
	private String tranType = "";					// 호출코드 (cash / card / cancel)
	private String approvalNo_send="";				// 승인번호
	// KICC 로부터 전달받는 파라미터.
	private String cardNumber = "";					// 카드번호 / 인증번호(주민번호,폰번호,사업자번호) 
	private String cardName = "";					// 카드사
	
	private String setting_money = "";				// 설치비
	private String setting_money_more = "";			// 추가설치비.  
	private String discount_money = "";				// 추가설치비에 대한 할인금액.  
	private String approvalAmount_get = "";			// 결재금액.  ##받는 이름은 approvalAmount -> pay_money
	private String rentContractNo_get = "";				// 계약번호.  ##받는 이름은 rentContractNo
	private String resultCode_get = "";					// 성공 코드 / 에러 사유
	private String approvalNo_get = "";					// 승인번호
	
	private String approvalDate = "";				// 승인일자
	private String pageType = "";					// 호출한 jsp 페이지. 1은 설치확정, 2는 결재변경
	private String acquirerCode = "";				// 카드사 코드 (매입코드). 예) 01 ~ 50 중 하나 
	private String orgApprovalNo = "";				// 원승인번호. 받은 값 사용.
	private String cashSelect = "";					// 현금 구분 - 개인 / 사업자.
	
	
	// 설치 확정 프로시저 위해 JSP 에서 가져오는 데이터
//	private String approvalDate  = "";				//중복
//	private String setting_money_more = "";			//중복
	private String reasonCode = "";					// 사유코드
	private String reason_write = "";				// 상세사유
	private String user_id = "";					// 등록자 ID

	
	
	private SharedPreferences pref = null;
	
	private String tongyangERPId = "";
	
//	private static final FrameLayout.LayoutParams ZOOM_PARAMS = new FrameLayout.LayoutParams(
//            ViewGroup.LayoutParams.FILL_PARENT,
//            ViewGroup.LayoutParams.WRAP_CONTENT,
//            Gravity.BOTTOM
//        );
	
	private String mailAddress = "tyandroid99@gmail.com";
//	private String authToken = "DQAAALcAAAA2RiFbp8mZQ_-FdMDIZaYB-Mq5xj--czAg9WOj-0uU3bcFfJqOyZWbIcNIru4WucksZqohdyfSbS-49AELvgEbCIKgOTWg0h8gyQX6USI0Bgxr3vTGWLSDI34HcrXMe2tk77nOKPovujRxG1xS4_wIL2CCVTtCZLkKlviEbtUdJB-McyCDQdsI3PuJ0LqKxc4PKLtmxdCNEIvwSW0ud__hBvFsdDKyBYGRHoMxEIFR2jnYbiSSjl7iyhIlfXvHZEY";
	public static String registerationId = "";
	public String viewBarCodeKind = "";
	
	float currentVersion = 0;
	float newVersion = 0;
	
	EditText edtText;
	
	PackageInfo pInfo = null;
	
	/** Called when the activity is first created. */
	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.dongyang);
		
		
		
		// Server 에 업로드된 안드로이드 앱의 최신 버전을 가져온다.
		//newVersion = Integer.parseInt(getNewVersion());
		newVersion = Float.parseFloat(getNewVersion());
		// 현재 설치되어 있는 앱의 버전을 가져 온다.
		try {
			pInfo = getPackageManager().getPackageInfo("kr.co.magic", PackageManager.GET_META_DATA);
			//currentVersion = pInfo.versionCode;
			//
			currentVersion = Float.parseFloat(pInfo.versionName);
			
			
			Log.e(TAG, "currentVersion : " + currentVersion);
		} catch (NameNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

		// 만약 최신 버전이 높으면 버전 업그레이트 화면으로 이동한다.
		if(newVersion > currentVersion) {
			new AlertDialog.Builder(DongyangView.this)
			.setTitle("업데이트 관리")
			.setMessage("새로운 버전이 있습니다." + "\n" + "업데이트 하시겠습니까?")
			.setCancelable(false)
			.setPositiveButton("업데이트", new DialogInterface.OnClickListener() {

				public void onClick(DialogInterface dialog, int which) {
					// TODO Auto-generated method stub

					Intent i = new Intent(Intent.ACTION_VIEW, Uri.parse(URL_DOWNLOAD_APK));
					startActivity(i);
					finish();
				}
			})
			.setNegativeButton("취소", new DialogInterface.OnClickListener() {
				public void onClick(DialogInterface dialog, int which) {
					// TODO Auto-generated method stub
					Toast.makeText(DongyangView.this, "업데이트가 취소되었습니다.", Toast.LENGTH_SHORT).show();
				}
			})
			.show();
		}
		
		
		

		// C2DM receiver service 를 실행 한다.
		Intent registrationIntent = new Intent("com.google.android.c2dm.intent.REGISTER");
		registrationIntent.putExtra("app", PendingIntent.getBroadcast(this, 0, new Intent(), 0));
		registrationIntent.putExtra("sender", mailAddress);
		
		//서비스 시작(등록ID발급받기) 두번 시작 주의.
//		startService(registrationIntent);
		
//		서비스 시작(등록ID발급받기)
		Log.e(TAG, "startService(registrationIntent) : " + startService(registrationIntent).toString());
		
		// 설정파일에서 저장된 id 를 읽어 온다.
		SharedPreferences prefs = getSharedPreferences("kr.co.magic.tymagic", Activity.MODE_PRIVATE);
		tongyangERPId = prefs.getString("tongyang_ERP_id", "");
		
		Log.e(TAG, "Get id : " + tongyangERPId);

		TelephonyManager manager = (TelephonyManager) getSystemService(TELEPHONY_SERVICE);
		phoneNo = manager.getLine1Number();
		deviceId = manager.getDeviceId();
		
		Log.e(TAG, "phoneNumber : " + phoneNo);
		Log.e(TAG, "deviceId    : " + deviceId);

		mWeb = (WebView)findViewById(R.id.web);
		FrameLayout mContentView = (FrameLayout)getWindow().getDecorView().findViewById(android.R.id.content);
//		final View zoom = this.mWeb.getZoomControls();
//		mContentView.addView(zoom, ZOOM_PARAMS);
//		zoom.setVisibility(View.GONE);

		// 이미지 확대/축소/스크롤 금지. -> 허용으로 수정.
		mWeb.getSettings().setUseWideViewPort(true);
		mWeb.setWebViewClient(new DongYang());
		mWeb.setWebChromeClient(new MyWebChromeClient());
		mWeb.addJavascriptInterface(new AndroidBridge(), "hybrid");
		WebSettings webSet = mWeb.getSettings();
		
		// JavaScript 허용.
		webSet.setJavaScriptEnabled(true);

		// 확대/축소 금지. -> 허용으로 수정.
		webSet.setSupportZoom(true);
		webSet.setBuiltInZoomControls(true);
		
		mWeb.loadUrl(URL_ADDRESS+"/index.jsp");
	}

	/* (non-Javadoc)
	 * @see android.app.Activity#onStart()
	 */
	@Override
	protected void onStart() {
		// TODO Auto-generated method stub
		super.onStart();
	}

	/**
	 * 로딩시 알람을 설정한다.
	 */
	@Override
	protected Dialog onCreateDialog(int id) {
		switch(id) {
		case DIALOG_DOWNLOAD_CONTENT : 
			mProgressDialog = new ProgressDialog(this);
//			mContentDialog.setTitle("잠시만 기다려 주세요.");
			mProgressDialog.setMessage("모바일 ERP 에 접속 중입니다..");
			return mProgressDialog;
		default:
			return super.onCreateDialog(id);
		}
	}

	/**
	 * WebViewClient 를 상속하는 클래스이다.
	 * 링크 등의 브라우저의 일반적인 기능을 처리하기 위한 클래스이다.
	 *
	 * @author John_Kim <cale9797@gmail.com>
	 *
	 */
	private class DongYang extends WebViewClient {
		public boolean shouldOverrideUrlLoading(WebView view, String url) {
			/**
			 * WebView 화면의 목록에서 전화번호와 비슷한 12312213 등의 숫자로만 
			 * 이루어진 값이 있을때 터치하면 전화걸기로 이동하는 오작동을 막는다.
			 */
			if (url.startsWith("mailto:") || url.startsWith("tel:")) {
                return false;
            }
			view.loadUrl(url);
			return true;
		}

		/* (non-Javadoc)
		 * @see android.webkit.WebViewClient#onPageFinished(android.webkit.WebView, java.lang.String)
		 */
		@Override
		public void onPageFinished(WebView view, String url) {
			// TODO Auto-generated method stub
			super.onPageFinished(view, url);
//			dismissDialog(DIALOG_DOWNLOAD_CONTENT);
		}

		/* (non-Javadoc)
		 * @see android.webkit.WebViewClient#onPageStarted(android.webkit.WebView, java.lang.String, android.graphics.Bitmap)
		 */
		@Override
		public void onPageStarted(WebView view, String url, Bitmap favicon) {
			// TODO Auto-generated method stub
			super.onPageStarted(view, url, favicon);
//			showDialog(DIALOG_DOWNLOAD_CONTENT);
		}
	}

	/**
	 * WebChromeClient 를 상속하는 클래스이다.
	 * alert 이나 윈도우 닫기 등의 web 브라우저 이벤트를 구하기 위한 클래스이다.
	 * 
	 * @author johnkim
	 *
	 */
	private class MyWebChromeClient extends WebChromeClient {

		//Javascript alert 호출 시 실행
		@Override
		public boolean onJsAlert(WebView view, String url, String message, JsResult result) {
			final JsResult finalRes = result;

			//AlertDialog 생성
			new AlertDialog.Builder(view.getContext())
			.setMessage(message)
			.setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() {
				public void onClick(DialogInterface dialog, int which) {
					finalRes.confirm(); 
				}
			})
			.setCancelable(false)
			.create()
			.show();
			return true;
		}
	}

	/**
	 * 뒤로가기를 터치하면 프로그램을 종료한다.
	 */
//	public boolean onKeyDown(int keyCode, KeyEvent event) {
//		switch(keyCode) {
//		case KeyEvent.KEYCODE_BACK : 
//			new AlertDialog.Builder(DongyangView.this)
//			.setTitle("프로그램 관리")
//			.setMessage("프로그램을 종료하시겠습니까?")
//			.setPositiveButton("확인", new DialogInterface.OnClickListener() {
//
//				public void onClick(DialogInterface dialog, int which) {
//					// TODO Auto-generated method stub
//					//					moveTaskToBack(true);
//					//
//					//					ActivityManager am = (ActivityManager) getSystemService(ACTIVITY_SERVICE);
//					//					am.restartPackage(getPackageName());
//
//					finish();
//				}
//
//
//			})
//			.setNegativeButton("취소", null)
//			.show();
//		}
//		return true;
//	}
	
	/**
	 * 만약 가능하다면, 뒷 페이지로 이동한다.
	 */
	@Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
		if(keyCode == KeyEvent.KEYCODE_BACK) {
			mWeb.loadUrl("javascript:jsGoBack();");
			return super.onKeyDown(keyCode, event);
		}
        return false;
    }
	
	/**
	 * Bridge Class
	 * 
	 * @author johnkim
	 *
	 */
	private class AndroidBridge {
		/**
		 * Server 에서 전화번호를 보내줄때만 전화를 걸 수 있다.
		 * 
		 * @param phoneNumber
		 */
		public void setCallingPhoneNumber(final String phoneNumber) {
			handler.post(new Runnable() {
				
				public void run() {
					// TODO Auto-generated method stub
					Log.e(TAG, "Received phoneNumber from Server : " + phoneNumber);
					
					if(("").equals(phoneNumber)) {
						Toast.makeText(DongyangView.this, "전화번호가 없습니다." + "\n" + "확인해 주세요.", Toast.LENGTH_SHORT).show();
					} else {
						Log.e(TAG, "Calling Phone.");

						startActivity(new Intent(Intent.ACTION_CALL, Uri.parse("tel:" + phoneNumber)));
					}
				}
				
			});
		}

		/**
		 * Server 에 로그인할때 필요한 데이터들을 세팅한다.
		 * 전화번호와 C2DM registration id 를 보내 준다.
		 */
		
		public void loginAndroidData() {
			handler.post(new Runnable() {

				public void run() {
					// TODO Auto-generated method stub
					mWeb.loadUrl("javascript:loginAndroid('" + phoneNo + "', '" + registerationId + "');");
				}
				
			});
		}
		
		/**
		 * 설정파일에 저장된 id 를 Server 로 보내 준다.
		 */
		public void sendAndroidId() {
			handler.post(new Runnable() {

				public void run() {
					// TODO Auto-generated method stub
					mWeb.loadUrl("javascript:sendAndroidId('" + tongyangERPId + "');");
				}
				
			});
		}
		
		/**
		 * Server 로 부터 입력된 id 를 가져 와서 설정파일에 저장한다.
		 * 
		 * @param androidId
		 */
		public void receivedAndroidId(final String androidId) {
			handler.post(new Runnable() {

				public void run() {
					// TODO Auto-generated method stub
					pref = getSharedPreferences("kr.co.magic.tymagic", 0);
					
					SharedPreferences.Editor edit = pref.edit();
					
					edit.putString("tongyang_ERP_id", androidId);
					edit.commit();
					
					Log.e(TAG, "Saved id : " + androidId);
				}
				
			});
		}
		
		/**
		 * Signature 화면을 출력한다.
		 */
		public void openSignatureView() {
			handler.post(new Runnable() {

				public void run() {
					// TODO Auto-generated method stub
					Log.e(TAG, ">>>>>>>>>>>>>> openSignatureView.");
					
					Intent i = new Intent(DongyangView.this, SignatureView.class);
					startActivityForResult(i, 0);
				}
				
			});
		}
		
		/**
		 * BarcodeScanner 화면을 출력한다.
		 */
		public void openBarcodeScannerView(final String barCodeKind) {
			handler.post(new Runnable() {

				public void run() {
					// TODO Auto-generated method stub
					
					// deliveryNo : 1 / productionNo : 2
					viewBarCodeKind = barCodeKind;
					
					IntentIntegrator.initiateScan(DongyangView.this);
					barCodeFlag = true;
				}
				
			});
		}
		
		
		/**
		 * 로그인이나 메인 페이지에서 뒤로가기를 터치할 경우 Application 을 종료 한다.
		 */
		public void applicationExit() {
			handler.post(new Runnable() {

				public void run() {
					// TODO Auto-generated method stub
					finish();
				}
				
			});
		}
		
		
		/**
		 * Server 로부터 KICC 통신에 전달할 파라미터를 받는다.
		 */
		
		// user_id : 설치기사 ID
		public void setUser_id(final String jsUser_id) {
			handler.post(new Runnable() {
				public void run() {
					// TODO Auto-generated method stub
					Log.e(TAG, "setUser_id");
					user_id = jsUser_id;
				}
			});
		}
		
		// rentContractNo : 계약번호
		public void setRentContractNo_send(final String jsRentContractNo) {
			handler.post(new Runnable() {
				public void run() {
					// TODO Auto-generated method stub
					Log.e(TAG, "setDeliveryNo_send");
					rentContractNo_send = jsRentContractNo;
				}
			});
		}
		// approvalAmount : 결재 총액 (기본설치비 + 추가설치비 - 할인금액). 모두 가져옴. setting_money / setting_money_more / discount_money / pay_money
		public void setMoney_send(final String jsSetting_money, final String jsSetting_money_more, final String jsDiscount_money, final String jsPay_money) {
			handler.post(new Runnable() {
				public void run() {
					// TODO Auto-generated method stub
					Log.e(TAG, "setMoney_send");
					setting_money		= jsSetting_money;
					setting_money_more	= jsSetting_money_more;
					discount_money		= jsDiscount_money;
					approvalAmount_send = jsPay_money;
					Log.e(TAG, "setting_money: "+setting_money);
					Log.e(TAG, "setting_money_more: "+setting_money_more);
					Log.e(TAG, "discount_money: "+discount_money);
					Log.e(TAG, "approvalAmount_send: "+approvalAmount_send);
				}
			});
		}
		// tranType : 호출 코드 (cash / card / cancel) --> (cCash / pCash / card / cCashCancel / pCashCancel / cardCancel)
		public void setTranType(final String jsTranType) {
			handler.post(new Runnable() {
				public void run() {
					// TODO Auto-generated method stub
					Log.e(TAG, "setTranType");
					tranType = jsTranType;
				}
			});
		}
		// pageType : 페이지 타입 : '1'은 설치확정페이지, '2'는 결재변경페이지
		public void setPageType(final String jsPageType) {
			handler.post(new Runnable() {
				public void run() {
					// TODO Auto-generated method stub
					Log.e(TAG, "setPageType");
					pageType = jsPageType;
				}
			});
		}
		// approvalNo, approvalDate : 승인번호, 승인날짜 (취소용)
		public void setApprovalInfo(final String jsApprovalNo, final String jsApprovalDate) {
			handler.post(new Runnable() {
				public void run() {
					// TODO Auto-generated method stub
					Log.e(TAG, "setApprovalInfo");
					approvalNo_send = jsApprovalNo;
//					approvalDate = jsApprovalDate.substring(0,6);
					approvalDate = jsApprovalDate;
				}
			});
		}
		
		// jsp  - mobile 통신 , KICC 호출. 리얼
		public void goKICC() throws ClientProtocolException, IOException {
			handler.post(new Runnable() {
				public void run() {
					Log.e(TAG, "go KICC");
					Intent i = new Intent();
					i.setClassName("kr.co.kicc.easycheckDongyang", "kr.co.kicc.easycheckDongyang.SmartCcmsMain");
					i.putExtra("rentContractNo", rentContractNo_send);
					i.putExtra("approvalAmount", approvalAmount_send);
					i.putExtra("tranType", tranType);
					if(tranType.equals("cancel")||(tranType.equals("pCashCancel"))||(tranType.equals("cCashCancel"))||(tranType.equals("cardCancel"))){
						Log.e(TAG, " + cancel data ");
						i.putExtra("approvalNo", approvalNo_send);					
						i.putExtra("approvalDate", approvalDate);
					}
					Log.e(TAG, "rentContractNo: "+rentContractNo_send);
					Log.e(TAG, "approvalAmount_send: "+approvalAmount_send);
					Log.e(TAG, "tranType: "+tranType);
					Log.e(TAG, "approvalNo: "+approvalNo_send);
					Log.e(TAG, "approvalDate: "+approvalDate);
					try{
						startActivityForResult(i, 1177);
					}catch (Exception e) {
						Toast.makeText(DongyangView.this, "오류가 발생했습니다." + "\n" + "KICC 어플 설치여부를 확인해주세요.", Toast.LENGTH_SHORT).show();
						setupApp("kr.co.kicc.easycheckDongyang");
					}finally{
						
					}
					
				}
			});
		}
		
		// KICC 어플 설치 안됨 -> 설치하러 감.
		void setupApp( String packageName )
		{
			//Uri marketUri = Uri.parse("market://details?id=com.inicis.pay.android") ;
			Uri marketUri = Uri.parse("market://details?id=" + packageName ) ;
			Intent marketIntent = new Intent(Intent.ACTION_VIEW).setData( marketUri ) ;
			startActivity( marketIntent ) ;
		}
		/**
		 * Server 에서 받은 idx 를 Client 에 정의한다.
		 * 
		 * @param jsIdx
		 */
		public void setIdx(final String jsIdx) {
			handler.post(new Runnable() {

				public void run() {
					// TODO Auto-generated method stub
					Log.e(TAG, "setIdx");
					idx = jsIdx;
				}
			});
		}
		
		/**
		 * Server 에서 받은 jsApprovalChecked 를 Client 에 정의한다.
		 * 
		 * @param jsApprovalChecked
		 */
		public void setApprovalChecked(final String jsApprovalChecked) {
			handler.post(new Runnable() {
				public void run() {
					// TODO Auto-generated method stub
					Log.e(TAG, "setApprovalChecked");
					approvalChecked = jsApprovalChecked;
				}
			});
			
		}
		
		/**
		 * Server 에서 받은 nextTarget 를 Client 에 정의한다.
		 * 
		 * @param jsNextTarget
		 */
		public void setNextTarget(final String jsNextTarget) {
			handler.post(new Runnable() {

				public void run() {
					// TODO Auto-generated method stub
					Log.e(TAG, "setNextTarget");
					nextTarget = jsNextTarget;
				}
				
			});
			
		}
		
		/**
		 * 
		 * @param jsOrganizationId
		 */
		public void setOrganizationId(final String jsOrganizationId) {
			handler.post(new Runnable() {

				public void run() {
					// TODO Auto-generated method stub
					Log.e(TAG, "setOrganizationId");
					organizationId = jsOrganizationId;
				}
				
			});
			
		}
		
		/**
		 * Server 의 id 를 Client 에 정의한다.
		 * 
		 * @param jsId
		 */
		public void setId(final String jsId) {
			handler.post(new Runnable() {

				public void run() {
					// TODO Auto-generated method stub
					Log.e(TAG, "setId");
					id = jsId;
				}
			});
		}
		
		/**
		 * Server 의 납품번호를 Client 에 정의한다.
		 * 
		 * @param jsDeliveryNo
		 */
		public void setDeliveryNo(final String jsDeliveryNo) {
			handler.post(new Runnable() {

				public void run() {
					// TODO Auto-generated method stub
					Log.e(TAG, "setDeliveryNo");
					deliveryNo = jsDeliveryNo;
				}
				
			});
			
		}
		
		/**
		 * Server 의 제조번호를 Client 에 정의한다.
		 * 
		 * @param jsProductionNo
		 */
		public void setProductionNo(final String jsProductionNo) {
			handler.post(new Runnable() {

				public void run() {
					// TODO Auto-generated method stub
					Log.e(TAG, "setProductionNo");
					productionNo = jsProductionNo;
				}
				
			});
			
		}
		
		/**
		 * Server 의 수압을 Client 에 정의한다.
		 * 
		 * @param jsWaterPress
		 */
		public void setWaterPress(final String jsWaterPress) {
			handler.post(new Runnable() {

				public void run() {
					// TODO Auto-generated method stub
					Log.e(TAG, "setWaterPress");
					waterPress = jsWaterPress;
				}
				
			});
			
		}
		
		
		/**
		 * Server 의 설치장소를 Client 에 정의한다.
		 * 
		 * @param jsLocation
		 */
		public void setLocation(final String jsLocation) {
			handler.post(new Runnable() {

				public void run() {
					// TODO Auto-generated method stub
					Log.e(TAG, "setLocation");
					location = jsLocation;
				}
				
			});
		}

		
		/**
		 * Server 의 결재방법을 Client 에 정의한다.
		 * 
		 * @param jsPayment_method
		 */
		public void setPayment_method(final String jsPayment_method) {
			handler.post(new Runnable() {

				public void run() {
					// TODO Auto-generated method stub
					Log.e(TAG, "setPayment_method");
					payment_method = jsPayment_method;
				}
				
			});
		}
		
		
		/**
		 * Server 의 카드승인번호를 Client 에 정의한다.
		 * 
		 * @param jsCard_approval_num
		 */
		public void setCard_approval_num(final String jsCard_approval_num) {
			handler.post(new Runnable() {

				public void run() {
					// TODO Auto-generated method stub
					Log.e(TAG, "setCard_approval_num");
					card_approval_num = jsCard_approval_num;
				}
				
			});
		}
		
		/**
		 * Server 의  설치확정 등록을 할때에 관련된 결재 정보를 모바일에 저장한다.
		 * 
		 * @param jsApprovalDate , jsSetting_money_more, jsReasonCode, jsReason_write
		 */
//		public void setKiccApprovalData(final String jsApprovalDate, final String jsSetting_money_more, final String jsReasonCode, final String jsReason_write) {
		public void setKiccApprovalData(final String jsApprovalDate, final String jsSetting_money_more, final String jsReasonCode, final String jsReason_write, final String jsCashSelect) {   // *** 나중에 이부분으로 변경
			handler.post(new Runnable() {
//				p_CardApprovalDate	: JSP 페이지의 approvalDate 값
//				p_IncreaseFee		: JSP 페이지의 setting_money_more 값
//				p_IncreaseReasonCode	: JSP 페이지의 reasonCode 값
//				p_IncreaseReasonDetail	: JSP 페이지의 reason_write 값
				public void run() {
					// TODO Auto-generated method stub
					Log.e(TAG, "setKiccApprovalData");
					approvalDate = jsApprovalDate;					// 결재일시, 13자리 그대로. 컨트롤러에서 12자리 끊어서 사용.
					setting_money_more = jsSetting_money_more;		// 추가설치비
					reasonCode = jsReasonCode;						// 사유코드
					reason_write = jsReason_write;					// 상세사유		
				    cashSelect = jsCashSelect;						// 현금 구분 - 개인 / 사업자.
				}
			});
		}
		
		/**
		 * Server 로 파라메터와 파일을 전송한다.
		 * 
		 * 서명을 했으면 서명파일을 전송하고 서명을 하지 않았으면 빈파일을 전송한다.
		 * 
		 * @throws ClientProtocolException
		 * @throws IOException
		 */
		public void registerConfirm() throws ClientProtocolException, IOException {
//			Toast.makeText(DongyangView.this, "처리중입니다."+"\n"+"잠시만 기다려 주십시오.", Toast.LENGTH_SHORT).show();		// 동기식일 때 토스트를 띄운다. 비동기식에서는 띄우지 않아도 된다.
			handler.post(new Runnable() {
				public void run() {
					// TODO Auto-generated method stub
					Log.e(TAG, "registerConfirm");
					
					// 미리 생성해 놓은 빈 그림 파일을 가져와서 세팅한다.
					Bitmap noSignature = BitmapFactory.decodeResource(getResources(), R.drawable.no_signature);
					
					ByteArrayOutputStream bos = new ByteArrayOutputStream();

					if(signature != null) {
						signature.compress(Bitmap.CompressFormat.PNG, 100, bos);
					} else {
						noSignature.compress(Bitmap.CompressFormat.PNG, 100, bos);
					}
					
//					signature.compress(Bitmap.CompressFormat.PNG, 100, bos);
					String fileName = phoneNo + "_signature" + ".png";
					
					String resultString = "";
					
					byte[] data = bos.toByteArray();

					//1 동기식 방법.
//					HttpClient httpClient = new DefaultHttpClient();
//					HttpPost postRequest = new HttpPost(URL_ADDRESS + "/registerConfirm.do");
				
					
					//2 비동기식 방법.
					AsyncHttpClient client = new AsyncHttpClient();
					RequestParams params = new RequestParams();
					
					ByteArrayBody bab = new ByteArrayBody(data, fileName);
					
//					MultipartEntity reqEntity = new MultipartEntity(HttpMultipartMode.BROWSER_COMPATIBLE);
					
					// 데이터 확인
					Log.e(TAG, "idx             	: " + idx);
					Log.e(TAG, "nextTarget      	: " + nextTarget);
					Log.e(TAG, "organizationId  	: " + organizationId);
					Log.e(TAG, "approvalChecked 	: " + approvalChecked);
					Log.e(TAG, "p_Id            	: " + id);
					Log.e(TAG, "p_DeliveryNo    	: " + deliveryNo);
					Log.e(TAG, "p_ProductionNo  	: " + productionNo);
					Log.e(TAG, "p_WaterPress    	: " + waterPress);
					Log.e(TAG, "p_Location    		: " + location);
					Log.e(TAG, "p_Payment_method    : " + payment_method);				// 결재 방식
					Log.e(TAG, "p_CashFlag 		: " + cashSelect);					// 현금구분 (개인:I,사업자:C)
					Log.e(TAG, "p_Card_approval_num : " + card_approval_num);			// 승인번호
					Log.e(TAG, "p_ApprovalDate : " + approvalDate);						// 승인일시
					Log.e(TAG, "p_Setting_money_more : " + setting_money_more);			// 추가설치비
					Log.e(TAG, "p_ReasonCode : " + reasonCode);							// 사유코드
					Log.e(TAG, "p_Reason_write : " + reason_write);						// 사유입력
					Log.e(TAG, "p_Signature     	: " + bab.getFilename());
					
					//1 동기식 방법.
//					try {
//						reqEntity.addPart("idx", new StringBody(idx));
//						reqEntity.addPart("nextTarget", new StringBody(nextTarget));
//						reqEntity.addPart("organizationId", new StringBody(organizationId));
//						reqEntity.addPart("approvalChecked", new StringBody(approvalChecked));
//						reqEntity.addPart("p_Id", new StringBody(id));
//						reqEntity.addPart("p_DeliveryNo", new StringBody(deliveryNo));
//						reqEntity.addPart("p_ProductionNo", new StringBody(productionNo));
//						reqEntity.addPart("p_WaterPress", new StringBody(waterPress));
//						reqEntity.addPart("p_Location", new StringBody(location));
//						reqEntity.addPart("p_Payment_method", new StringBody(payment_method));
//						reqEntity.addPart("p_CashFlag", new StringBody(cashSelect));
//						reqEntity.addPart("p_Card_approval_num", new StringBody(card_approval_num));
//						reqEntity.addPart("p_CardApprovalDate", new StringBody(approvalDate));
//						reqEntity.addPart("p_IncreaseFee", new StringBody(setting_money_more));
//						reqEntity.addPart("p_IncreaseReasonCode", new StringBody(reasonCode));
//						reqEntity.addPart("p_IncreaseReasonDetail", new StringBody(reason_write));
//						reqEntity.addPart("p_Signature", bab);
//						reqEntity.addPart("browserType", new StringBody("2"));

					//2 비동기식 방법.
						params.put("idx", idx);
						params.put("nextTarget", nextTarget);
						params.put("organizationId", organizationId);
						params.put("approvalChecked", approvalChecked);
						params.put("p_Id", id);
						params.put("p_DeliveryNo", deliveryNo);
						params.put("p_ProductionNo", productionNo);
						params.put("p_WaterPress", waterPress);
						params.put("p_Location", location);
						params.put("p_Payment_method", payment_method);
						params.put("p_CashFlag", cashSelect);
						params.put("p_Card_approval_num", card_approval_num);
						params.put("p_CardApprovalDate", approvalDate);
						params.put("p_IncreaseFee", setting_money_more);
						params.put("p_IncreaseReasonCode", reasonCode);
						params.put("p_IncreaseReasonDetail", reason_write);
						params.put("browserType", "2");
						params.put("p_Signature", new ByteArrayInputStream(data));	
						client.post(URL_ADDRESS + "/registerConfirm.do", params, new AsyncHttpResponseHandler(){
							@Override
							public void onSuccess(String resultString) {
								Log.e(TAG, "registerConfirm success");
								String[] result = resultString.split("/");
								String resultString1 = result[0];			// 결과 코드
								String resultString2 = result[1];			// 2
								String resultString3 = result[2];			// 브라우저 타입
								Log.e(TAG, "resultString1 : " + resultString1);
								Log.e(TAG, "resultString2 : " + resultString2);
								Log.e(TAG, "resultString3 : " + resultString3);
//								Log.e(TAG, "resEntity : " + EntityUtils.toString(resEntity))
								mWeb.loadUrl("javascript:showProcedureResult('" + resultString1 + "', '" + resultString2 + "', '" + resultString3 + "');");
						    }
							@Override
						     public void onFailure(Throwable e, String response) {
						         // Response failed :(
								Log.e(TAG, "registerConfirm fail");
						     }
							@Override
						     public void onFinish() {
						         // Completed the request (either success or failure) // finish 등 처리를 만들지 않으면, 끝내고 다음으로 넘어가지 못한다.
								Log.e(TAG, "registerConfirm finish");
						     }
						});
						
					//1 동기식	방법						
//						postRequest.setEntity(reqEntity);
//						HttpResponse response = httpClient.execute(postRequest);
//						HttpEntity resEntity = response.getEntity();
//						resultString = EntityUtils.toString(resEntity);
						
//						String[] result = resultString.split("/");
//						String resultString1 = result[0];			// 결과 코드
//						String resultString2 = result[1];			// 2
//						String resultString3 = result[2];			// 브라우저 타입
//						Log.e(TAG, "resultString1 : " + resultString1);
//						Log.e(TAG, "resultString2 : " + resultString2);
//						Log.e(TAG, "resultString3 : " + resultString3);
//						Log.e(TAG, "resEntity : " + EntityUtils.toString(resEntity));
						
//						if (resEntity != null) {
//							resEntity.consumeContent();
//						}
						// Server 의 javascript function 에 파라메터를 넘겨 준다.
//						mWeb.loadUrl("javascript:showProcedureResult('" + resultString1 + "', '" + resultString2 + "', '" + resultString3 + "');");
//					} catch (UnsupportedEncodingException e) {
//						// TODO Auto-generated catch block
//						e.printStackTrace();
//						Toast.makeText(DongyangView.this, "통신오류가 발생했습니다." + "\n" + "다시 시도해 주세요.", Toast.LENGTH_SHORT).show();
//					} catch (ClientProtocolException e) {
//						// TODO Auto-generated catch block
//						e.printStackTrace();
//						Toast.makeText(DongyangView.this, "통신오류가 발생했습니다." + "\n" + "다시 시도해 주세요.", Toast.LENGTH_SHORT).show();
//					} catch (IOException e) {
//						// TODO Auto-generated catch block
//						e.printStackTrace();
//						Toast.makeText(DongyangView.this, "통신오류가 발생했습니다." + "\n" + "다시 시도해 주세요.", Toast.LENGTH_SHORT).show();
//					}
//					httpClient.getConnectionManager().shutdown();
						
				}
			});
			// Procedure 처리 후 결과를 확인하기 위해서 alert 창을 출력한다.  핸들러 사용
			handler.post(new Runnable() {
				public void run() {
					mWeb.loadUrl("javascript:goFE_Approval();");
				}
				
			});
							
		}
    }
	
	/**
	 * Server 로 파라메터를 전송한다.
	 * 
	 * @throws ClientProtocolException
	 * @throws IOException
	 */
	public void logKICC_ToServer() throws ClientProtocolException, IOException {
		handler.post(new Runnable() {
			public void run() {
				// TODO Auto-generated method stub
				Log.e(TAG, "logKICC_ToServer");
				if(rentContractNo_get==null) rentContractNo_get = "";
				if(approvalAmount_get==null) approvalAmount_get = "";
				if(setting_money==null) setting_money = "";
				if(setting_money_more==null) setting_money_more = "";
				if(discount_money==null) discount_money = "";
				if(tranType==null) tranType = "";
				if(cardNumber==null) cardNumber = "";
				if(acquirerCode==null) acquirerCode = "";
				if(cardName==null) cardName = "";
				if(approvalDate==null) approvalDate = "";
				if(approvalNo_get==null) approvalNo_get = "";
				if(user_id==null) user_id = "";
//				if(approvalNo_send==null) approvalNo_send = "";
				approvalNo_send = orgApprovalNo;
				String resultString = "";
				
				HttpClient httpClient = new DefaultHttpClient();
				HttpPost postRequest = new HttpPost(URL_ADDRESS + "/callTR1304.do");

				MultipartEntity reqEntity = new MultipartEntity(HttpMultipartMode.BROWSER_COMPATIBLE);
				
				Log.e(TAG, "p_cnrc_no             	: " + rentContractNo_get);		// 계약번호
				Log.e(TAG, "p_tot_amt      			: " + approvalAmount_get);		// 총금액(결재)
				Log.e(TAG, "p_init_amt  			: " + setting_money);			// 설치비
				Log.e(TAG, "p_org_add_init_amt 		: " + setting_money_more);		// 추가설치비(원추가설치비)
				Log.e(TAG, "p_dc_amt            	: " + discount_money);			// 추가설치 할인금액
				Log.e(TAG, "p_pmnt_ptrn_cd    		: " + tranType);				// 납부방법 (카드:OD00600006, 현금: OD00600007)
				Log.e(TAG, "p_cstm_ptrn_cd 			: " + cashSelect);				// 현금구분 (개인:I,사업자:C)
				Log.e(TAG, "p_evdn_no  				: " + cardNumber);				// 증빙번호 : 카드,주민,폰
				Log.e(TAG, "p_buyp_cd    			: " + acquirerCode);			// 매입사 코드
				Log.e(TAG, "p_buyp_nm    			: " + cardName);				// 매입사명
				Log.e(TAG, "p_athz_dttm    			: " + approvalDate);			// 승인일시 _ YYMMDDHHMMSS 12자리		
				Log.e(TAG, "p_athz_no 				: " + approvalNo_get);			// 승인번호
				Log.e(TAG, "p_rgsr_id 				: " + user_id);					// 등록자 id
				Log.e(TAG, "p_org_athz_no 			: " + approvalNo_send);			// 원승인번호(취소시)
				
				
				try {
					reqEntity.addPart("p_cnrc_no", new StringBody(rentContractNo_get));		// 계약번호
					reqEntity.addPart("p_tot_amt", new StringBody(approvalAmount_get));		// 총금액(결재)
					reqEntity.addPart("p_init_amt", new StringBody(setting_money));			// 설치비
					reqEntity.addPart("p_org_add_init_amt", new StringBody(setting_money_more)); //추가설치비(원추가설치비)
					reqEntity.addPart("p_dc_amt", new StringBody(discount_money));			//추가설치 할인금액
					reqEntity.addPart("p_pmnt_ptrn_cd", new StringBody(tranType));			// 납부방법 (카드:OD00600006, 현금: OD00600007)
					reqEntity.addPart("p_cstm_ptrn_cd", new StringBody(cashSelect));		// 현금구분 (개인:I,사업자:C)
					reqEntity.addPart("p_evdn_no", new StringBody(cardNumber));				// 증빙번호 : 카드,주민,폰
					reqEntity.addPart("p_buyp_cd", new StringBody(acquirerCode));			// 매입사 코드
					reqEntity.addPart("p_buyp_nm", new StringBody(cardName));				// 매입사명
					reqEntity.addPart("p_athz_dttm", new StringBody(approvalDate));			// 승인일시 _ YYMMDDHHMMSS 12자리	
					reqEntity.addPart("p_athz_no", new StringBody(approvalNo_get));			// 승인번호
					reqEntity.addPart("p_rgsr_id", new StringBody(user_id));				// 등록자 id
					reqEntity.addPart("p_org_athz_no", new StringBody(approvalNo_send));	// 원승인번호(취소시)
						
					reqEntity.addPart("browserType", new StringBody("2"));

					postRequest.setEntity(reqEntity);
					HttpResponse response = httpClient.execute(postRequest);

					HttpEntity resEntity = response.getEntity();
					
					resultString = EntityUtils.toString(resEntity);
					
					String[] result = resultString.split("/");
					
					String resultString1 = result[0];			// 결과 1
					String resultString2 = result[1];			// 결과 2
					String resultString3 = result[2];			// 결과 3
					
					Log.e(TAG, "resultString1 : " + resultString1);
					Log.e(TAG, "resultString2 : " + resultString2);
					Log.e(TAG, "resultString3 : " + resultString3);
					
					if (resEntity != null) {
						resEntity.consumeContent();
					}

					
					
					if((resultString1.equals("S"))) {
						// Server 의 javascript function 에 파라메터를 넘겨 준다.
						mWeb.loadUrl("javascript:showProcedureResult_2('" + resultString1 + "', '" + resultString2 + "', '" + resultString3 + "', '" + '2' + "', '" + tranType+"');");			
					}else{
						// 실패시 재시도
						new AlertDialog.Builder(DongyangView.this)
						.setTitle("결제정보 저장실패")
						.setMessage("결제 정보 저장에 실패하였습니다." + "\n" + "재시도 하시겠습니까?")
						.setCancelable(false)
						.setPositiveButton("재시도", new DialogInterface.OnClickListener() {
							public void onClick(DialogInterface dialog, int which) {
								// TODO Auto-generated method stub
								try {
									logKICC_ToServer();
								} catch (ClientProtocolException e) {
									// TODO Auto-generated catch block
									e.printStackTrace();
								} catch (IOException e) {
									// TODO Auto-generated catch block
									e.printStackTrace();
								}
							}
						})
						.setNegativeButton("저장안함", new DialogInterface.OnClickListener() {
							public void onClick(DialogInterface dialog, int which) {
								// TODO Auto-generated method stub
								Toast.makeText(DongyangView.this, "서버에 결제 정보를 저장하지 못했습니다.", Toast.LENGTH_SHORT).show();
							}
						})
						.show();
						}
				} catch (UnsupportedEncodingException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
					Toast.makeText(DongyangView.this, "통신오류가 발생했습니다." + "\n" + "다시 시도해 주세요.", Toast.LENGTH_SHORT).show();
					mWeb.loadUrl("javascript:say('오류가 발생하였습니다. 결재취소후 다시 결재해주십시오.');");
				} catch (ClientProtocolException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
					Toast.makeText(DongyangView.this, "통신오류가 발생했습니다." + "\n" + "다시 시도해 주세요.", Toast.LENGTH_SHORT).show();
					mWeb.loadUrl("javascript:say('오류가 발생하였습니다. 결재취소후 다시 결재해주십시오.');");
				} catch (IOException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
					Toast.makeText(DongyangView.this, "통신오류가 발생했습니다." + "\n" + "다시 시도해 주세요.", Toast.LENGTH_SHORT).show();
					mWeb.loadUrl("javascript:say('오류가 발생하였습니다. 결재취소후 다시 결재해주십시오.');");
				}
				httpClient.getConnectionManager().shutdown();
			}
		});
	}

	
	/* Android 에서 제공하는 뒤로 가기 기능을 막는다. 
	 * 서버에서 컨트롤하는 것으로 수정 함.
	 * 
	 * @see android.app.Activity#onBackPressed()
	 */
	@Override
	public void onBackPressed() {
		// TODO Auto-generated method stub
//		super.onBackPressed();
	}

	/* signature 파일이 제대로 생성되는지 테스트용으로 저장한다.
	 * 실제 로직에서는 사용되지 않는다 : 주석처리 할 것.
	 * 
	 * @see android.app.Activity#onActivityResult(int, int, android.content.Intent)
	 */
	@Override
	protected void onActivityResult(int requestCode, int resultCode, Intent data) {
		// TODO Auto-generated method stub
		super.onActivityResult(requestCode, resultCode, data);
		Log.e(TAG, "onActivityResult");
		
		if(requestCode == 1177) {							// KICC 어플 호출 코드 1177 (1177의 의미는 없음. 호출할때와 받을때 같은 요청 코드를 사용해야 함)
			if(resultCode == RESULT_OK) {
				/**
				 * KICC 앱의 실행 결과를 돌려 받는다.
				 */
			// 카드번호
				cardNumber = data.getStringExtra("cardNumber");							
				if(cardNumber == null)
					cardNumber = "";
				Log.e(TAG, "requestCode=1177, cardNumber:"+cardNumber);
			// 카드사
				cardName = data.getStringExtra("cardName");							
				if(cardName == null)
					cardName = "";
				Log.e(TAG, "requestCode=1177, cardName:"+cardName);
				
				acquirerCode = data.getStringExtra("acquirerCode");							
				if(acquirerCode == null)
					acquirerCode = "";
				Log.e(TAG, "requestCode=1177, acquirerCode:"+acquirerCode);
			// 결재금액	(확인용)
				approvalAmount_get = data.getStringExtra("approvalAmount");						
				if(approvalAmount_get == null)
					approvalAmount_get = "";
				Log.e(TAG, "requestCode=1177, approvalAmount_get:"+approvalAmount_get);
			// 계약번호 (확인용)
				rentContractNo_get = data.getStringExtra("rentContractNo");						
				if(rentContractNo_get == null)
					rentContractNo_get = "";
				Log.e(TAG, "requestCode=1177, rentContractNo_get:"+rentContractNo_get);
			// 성공코드/에러사유
				resultCode_get = data.getStringExtra("resultCode");							
				if(resultCode_get == null){				// 결과 코드 안옴
					resultCode_get = "missing";
				}else if(resultCode_get.equals("0000")){	// KICC는 성공.
					if( (approvalAmount_get.equals(approvalAmount_send)) && (rentContractNo_get.equals(rentContractNo_send))){
						// 계약번호, 금액 일치했는지 확인 완료.
						Log.e(TAG, "KICC 요청 처리 완료!!");
						// ** 로그를 남기는 프로시저를 호출하는 부분을 추가한다.  단, 결과 코드가 성공일 때에만 호출하여 기록한다. 
						try {
							logKICC_ToServer();
						} catch (ClientProtocolException e) {
							// TODO Auto-generated catch block
							e.printStackTrace();
						} catch (IOException e) {
							// TODO Auto-generated catch block
							e.printStackTrace();
						}
					}else{
						// 불일치
						Log.e(TAG, "처리되었지만 전송한 계약번호 또는 금액이 처리된 계약번호 또는 금액과 일치하지 않습니다.");
						Log.e(TAG, "approvalAmount_get:"+approvalAmount_get);
						Log.e(TAG, "approvalAmount_send:"+approvalAmount_send);
						Log.e(TAG, "rentContractNo_get:"+rentContractNo_get);
						Log.e(TAG, "rentContractNo_send:"+rentContractNo_send);
						if((rentContractNo_get.equals(rentContractNo_send)) && (tranType.equals("card")||tranType.equals("cash")||(tranType.equals("pCash"))||(tranType.equals("cCash")))){		// 계약번호 불일치 , 결재
							resultCode_get = "9991";
						}else if((approvalAmount_get.equals(approvalAmount_send)) && (tranType.equals("card")||tranType.equals("cash")||tranType.equals("pCash")||tranType.equals("cCash"))){ // 금액 불일치, 결재
							resultCode_get = "9992";
						}else if(rentContractNo_get.equals(rentContractNo_send) && (tranType.equals("cancel")||tranType.equals("cCashCancel")||tranType.equals("pCashCancel")||tranType.equals("cardCancel"))){	// 계약번호 불일치, 취소
							resultCode_get = "9993";
						}else if((approvalAmount_get.equals(approvalAmount_send)) && (tranType.equals("cancel")||tranType.equals("cCashCancel")||tranType.equals("pCashCancel")||tranType.equals("cardCancel"))){ // 금액 불일치, 취소
							resultCode_get = "9994";
						}else{				// 모두 불일치..9999
							resultCode_get = "9999";
						}
						approvalAmount_send = "";
					}
				}else{		// 실패
					Log.e(TAG, "거절 또는 통신 실패 : "+resultCode_get);
				}
				Log.e(TAG, "requestCode=1177, resultCode_get:"+resultCode_get);
			// 승인번호
				approvalNo_get = data.getStringExtra("approvalNo");							
				if(approvalNo_get == null)
					approvalNo_get = "";
				Log.e(TAG, "requestCode=1177, approvalNo_get:"+approvalNo_get);
				
			// 원승인번호
				orgApprovalNo = data.getStringExtra("orgApprovalNo");
				if(orgApprovalNo == null)
					orgApprovalNo = "";
				Log.e(TAG, "requestCode=1177, orgApprovalNo:"+orgApprovalNo);
			// 승인일자
				approvalDate = data.getStringExtra("approvalDate");						
				if(approvalDate == null)
					approvalDate = "";
				Log.e(TAG, "requestCode=1177, approvalDate:"+approvalDate);

				
				
				// 일단 데이터만 전달하여 알림창으로 띄움. 위에서 프로시저 했다면 JSP 페이지에 결과를 세팅하는 부분이 필요함. (<-서버에서 처리가능) 일단 테스트용. 
					// 리얼은 kicc_ok(성공코드, 결재방식, 승인번호, 승인일자)
				handler.post(new Runnable() {
					public void run() {
						mWeb.loadUrl("javascript:kicc_ok('" + cardNumber + "', '" + cardName + "', '" + acquirerCode + "', '" 
								+ approvalAmount_get + "', '" + rentContractNo_get + "', '" 
								+ resultCode_get + "', '" + approvalNo_get + "', '" + approvalDate + "', '" + tranType + "');");
					}
				});
				
			}
		}else{
	//		String fileName = "";
	//		
	//		if(signature != null && barCodeFlag == false) {
	//			currentDate = dongYangCommon.getCurrentDate();
	//			
	////			fileName = phoneNumber 
	////					+ "_" + currentDate.substring(0, 10) 
	////					+ "_" + currentDate.substring(11, 13) 
	////					+ "_" + currentDate.substring(14, 16) 
	////					+ "_" + currentDate.substring(17, 19);
	//			
	//			fileName = phoneNo + "_signature";
	//			
	//			File path = new File("/sdcard/dongyang");
	//			
	//			if(! path.isDirectory()) {
	//				path.mkdir();
	//			}
	//			
	//			try {
	//				FileOutputStream out = new FileOutputStream("/sdcard/dongyang/" + fileName + ".png");
	//				signature.compress(Bitmap.CompressFormat.PNG, 100, out);
	//			} catch (FileNotFoundException e) {
	//				// TODO Auto-generated catch block
	//				e.printStackTrace();
	//			}
	//		}
			// 서명을 한 경우 Server 의 서명란의 이미지를 교체한다.
			if(signature != null && barCodeFlag == false) {
				handler.post(new Runnable() {
					public void run() {
						mWeb.loadUrl("javascript:confirmUploadedSignature();");
					}
				});
			}
			// 바코드 스캐너일 경우 바코드 값을 설정한다.
			if(barCodeFlag) {
				IntentResult result = IntentIntegrator.parseActivityResult(requestCode, resultCode, data);
				
				barCode = result.getContents();
				Toast.makeText(DongyangView.this, barCode, Toast.LENGTH_LONG).show();
				
				mWeb.loadUrl("javascript:getBarCode(" + barCode + ");");
				
				/**
				 * deliveryNo 일 경우 javascript:getDeliveryNoBarCode 을 호출한다.
				 * productionNo 일 경우 javascript:getProductionNoBarCode 을 호출한다.
				 */
				if(("1").equals(viewBarCodeKind)) {
					mWeb.loadUrl("javascript:getDeliveryNoBarCode('" + barCode + "');");
				} else {
					mWeb.loadUrl("javascript:getProductionNoBarCode('" + barCode + "');");
				}
				
				// javascript function 을 호출하고 나면 파라메터들을 초기화 한다.
				viewBarCodeKind = "";
				barCodeFlag = false;
			}
		}
	}
	
	
	
	/**
	 * Server 에 등록된 안드로이드 앱의 최신 버전을 가져 온다.
	 * 
	 * @return
	 */
	public String getNewVersion() {
		Log.e(TAG, "getNewVersion_fn");
		
		String newVersion = "";
		
		BufferedReader br = null;
		InputStream is = null;
		try {
			URL url = new URL(URL_NEW_VESION);
			Log.e(TAG, "getNewVersion_fn1");
			URLConnection urlConn = url.openConnection();
			urlConn.setDoInput(true);
			urlConn.setConnectTimeout(4000);	// (타이머 2초)
			urlConn.connect();
			is = urlConn.getInputStream();
			Log.e(TAG, "getNewVersion_fn2");
			br = new BufferedReader(new InputStreamReader(is));
			newVersion = br.readLine();
			if(("").equals(newVersion) && newVersion == null) {
				newVersion = "0";
			}
			Log.e(TAG, "new version : " + newVersion);
		} catch(Exception e) {
		}
		return newVersion;
	}
}

